package br.com.ff.manager.managebean;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import br.com.ff.cliente.session.ClienteLocal;
import br.com.ff.cliente.to.ClienteTO;
import br.com.ff.common.StatusEnum;
import br.com.ff.common.exception.EntidadeDuplicadaException;
import br.com.ff.manager.managebean.base.BaseManagedBean;

public class CrudCliente extends BaseManagedBean {
	
	@EJB
	ClienteLocal clienteLocal;
	
	ClienteTO clienteTO = new ClienteTO();
	List<ClienteTO> clientes = new ArrayList<ClienteTO>();	
	private boolean exibirTabela = false;
	
	private List<SelectItem> listaStatus = new ArrayList<SelectItem>();
	
	private int statusValue;
	
	public String consultar() throws IOException {
				
		if (getStatusValue() == StatusEnum.ATIVO.getStatus()) {
			getClienteTO().setStatus(StatusEnum.ATIVO);
		} else if (getStatusValue() == StatusEnum.INATIVO.getStatus()){
			getClienteTO().setStatus(StatusEnum.INATIVO);
		} else {
			getClienteTO().setStatus(null);
		}
		
		clientes = getClienteLocal().findByParams(getClienteTO());
		return "success";
	}
	
	public String goIncluir() throws IOException {
		clienteTO = new ClienteTO();
		return "go_salvar";
	}
	
	public void goEditar(ActionEvent event) throws IOException {
		UIParameter component = (UIParameter) event.getComponent().findComponent("id");
		Long id = (Long)component.getValue();
		
		clienteTO = getClienteLocal().findById(id);
		statusValue = clienteTO.getStatus().getStatus();
		
		redirecionarPara("salvarCliente.xhtml");
	}
	
	public String salvar() throws IOException {
		
		if (getStatusValue() == 1) {
			getClienteTO().setStatus(StatusEnum.ATIVO);
		} else {
			getClienteTO().setStatus(StatusEnum.INATIVO);
		}
		
		try {
			if (getClienteTO().getId() != null) {
				getClienteLocal().atualizar(getClienteTO());
			} else {
				getClienteLocal().salvar(getClienteTO());
			}
		} catch (EntidadeDuplicadaException e) {
			FacesContext.getCurrentInstance().addMessage("", new FacesMessage(e.getMessage()));
			return "";
		}
		
		limpar();
		redirecionarPara("msgSucesso.xhtml?url=consultarCliente.xhtml");
		
		return "success";
	}
	
	public void remover(ActionEvent event) throws IOException {
		
		UIParameter component = (UIParameter) event.getComponent().findComponent("id");
		Long id = (Long)component.getValue();
		getClienteLocal().remover(id);
		
		limpar();
		redirecionarPara("msgSucesso.xhtml?url=consultarCliente.xhtml");
		
	}
	
	private void limpar() {
		clienteTO = new ClienteTO();
		statusValue = 0;
		clientes = new ArrayList<ClienteTO>();
	}
	
	public ClienteLocal getClienteLocal() {
		return clienteLocal;
	}
	public void setClienteLocal(ClienteLocal clienteLocal) {
		this.clienteLocal = clienteLocal;
	}
	public ClienteTO getClienteTO() {
		return clienteTO;
	}
	public void setClienteTO(ClienteTO clienteTO) {
		this.clienteTO = clienteTO;
	}
	public List<ClienteTO> getClientes() {
		return clientes;
	}
	public void setClientes(List<ClienteTO> clientes) {
		this.clientes = clientes;
	}
	public boolean isExibirTabela() {
		if (!clientes.isEmpty()) {
			exibirTabela = true; 
		} else {
			exibirTabela = false;
		}
		return exibirTabela;
	}
	public void setExibirTabela(boolean exibirTabela) {
		this.exibirTabela = exibirTabela;
	}
	public List<SelectItem> getListaStatus() {
		
		if (listaStatus.isEmpty()) {
			listaStatus = gerarListStatus();
		}
		return listaStatus;
		
	}
	public void setListaStatus(List<SelectItem> listaStatus) {
		this.listaStatus = listaStatus;
	}
	public int getStatusValue() {
		return statusValue;
	}
	public void setStatusValue(int statusValue) {
		this.statusValue = statusValue;
	}

}
